package my.consumer.demo.controller;

import my.consumer.demo.service.RestTemplateService;
import my.consumer.demo.vo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("restTemplate")
public class RestTemplateController {

    @Autowired
    private LoadBalancerClient loadBalancerClient;
    @Autowired
    private RestTemplateService serviceDefault;

    /**
     *          负载均衡：
     * 启动两个提供者，调用addUser方法，
     * 使用返回的userId去调用getUser方法，
     * 发现并不是每次都会有数据，
     * 因为这个user对象只存在于其中一个提供者中，
     * 这里可能会存在数据一致性问题，
     * 但是可以看出ribbon的负载均衡生效了
     */

    /**
     *     熔断降级看RestTemplateService
     */


    @GetMapping("getUser")
    public User getUser(@RequestParam String userId) {
        return serviceDefault.getUser(userId);
    }

    @PostMapping("addUser")
    public String addUser(@RequestBody User user) {
        return serviceDefault.addUser(user);
    }

    /**
     * 使用loadBalancerClient测试负载均衡的效果
     */
    @GetMapping("test")
    public void test() {
        String id = "providerDefault";
        for (int i = 0; i < 100; i++) {
            ServiceInstance choose = loadBalancerClient.choose(id);
            System.out.println(choose.getHost() + ":" + choose.getPort());
        }
    }

}
